#include <bits/stdc++.h>
using namespace std;

#define OK 1
#define ERROR 0
typedef int Status;

typedef struct BiTNode{ // 二叉树节点
    int data;
    struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;

typedef struct QNode{ // 队列单个节点：用于层次遍历（广搜）
    BiTree data;  // 存储二叉树节点指针
    struct QNode *next; // 指向下一个节点
} QNode, *QueuePtr;

typedef struct{ // 队列整体结构
    QueuePtr front; // 队头指针
    QueuePtr rear; // 队尾指针
} LinkQueue;

Status InitQueue(LinkQueue &Q){ // 链队初始化
    Q.front = Q.rear = new QNode;
    Q.front->next = NULL;
    return OK;
}

Status EnQueue(LinkQueue &Q, BiTree e){ // 链队入队
    QNode *p = new QNode;
    p->data = e;
    p->next = NULL;
    Q.rear->next = p;
    Q.rear = p;
    return OK;
}

Status DeQueue(LinkQueue &Q, BiTree &e){ // 链队出队    
    if(Q.front == Q.rear) return ERROR;
    QueuePtr p = Q.front->next; // p指向队头元素
    e = p->data;
    Q.front->next = p->next;
    if(Q.rear == p){
        Q.rear = Q.front;
    }
    delete p;
    return OK;
}

Status QueueEmpty(LinkQueue Q){
    return Q.front == Q.rear;
}

void CreateTree(BiTree &T){
    int x;
    cin >> x;
    if(x != -1){
        T = new BiTNode;
        T->data = x;
        CreateTree(T->lchild);
        CreateTree(T->rchild);
    }else T = NULL;
}

bool IsCompleteTree(BiTree T){
    if(!T) return true; // 空树是完全二叉树

    LinkQueue Q;
    InitQueue(Q);
    EnQueue(Q, T); // 根节点入队
    bool meetNull = false; // 记录第一个遇到的空结点

    while(!QueueEmpty(Q)){
        BiTree cur;
        DeQueue(Q, cur); // 取出队首节点
        if(!cur) meetNull = true;
        else{
            if(meetNull) return false; // 空结点之后不能再出现空结点了
            EnQueue(Q, cur->lchild);
            EnQueue(Q, cur->rchild);
        }
    }
    return true;
}

int main(){
    BiTree T;
    CreateTree(T);
    int flag = IsCompleteTree(T);
    if(flag) cout << "True\n";
    else cout << "False\n";

    return 0;
}